package condominio.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.prefs.BackingStoreException;

import condominio.excepcion.DAOExcepcion;
import condominio.modelo.EspaciosComunes;
import condominio.util.ConexionBD;


//Insertar 
public class EspaciosComunesDAO extends BaseDAO {

	public EspaciosComunes insertar(EspaciosComunes vo) throws DAOExcepcion {

		System.out.println("EspaciosComunesDAO: insertar() inserto Corectamente ");
		String query = "INSERT INTO espacios_comunes(nombreESPACIOCOMUNES, fechaESPACIOCOMUNES,horasESPACIOSCOMUNES, detalleESPACIOSCOMUNES) VALUES (?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			//stmt.setInt(1, vo.getIdEspaciosComunes());
			stmt.setString(1, vo.getNombreEspaciosComunes());
			stmt.setString(2,vo.getFechaEspaciosComunes());
			stmt.setString(3, vo.getHorarioLibre());
			stmt.setString(4, vo.getDetalleEspaciosComunes());
			
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			vo.setIdEspaciosComunes(id);
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	public EspaciosComunes actualizar(EspaciosComunes vo) throws DAOExcepcion {
		System.out.println("EspaciosComunesDAO: actualizar() Actualizo Corectamente ");
		String query = "update espacios_comunes set nombreESPACIOCOMUNES=?,fechaESPACIOCOMUNES=?, horasESPACIOSCOMUNES=? detalleESPACIOSCOMUNES=? where idEspaciosComunes=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNombreEspaciosComunes());
			stmt.setString(2,vo.getFechaEspaciosComunes());
			stmt.setString(3, vo.getHorarioLibre());
			stmt.setString(4, vo.getDetalleEspaciosComunes());
			stmt.setInt(5, vo.getIdEspaciosComunes());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	public Collection<EspaciosComunes> listar(String Nombre) throws DAOExcepcion {
		System.out.println("EspaciosComunesDAO: listar() listo Corectamente ");
		Collection<EspaciosComunes> c = new ArrayList<EspaciosComunes>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			//String query = "select idESPACIOSCOMUNES,nombreESPACIOSCOMUNES, fechaESPACIOSCOMUNES,horasESPACIOSCOMUNES, detalleESPACIOSCOMUNES from espacios_comunes where fechaEspaciosComunes= ?";
			String query = "select idESPACIOSCOMUNES,nombreESPACIOCOMUNES, fechaESPACIOCOMUNES,horasESPACIOSCOMUNES, detalleESPACIOSCOMUNES from espacios_comunes where nombreESPACIOCOMUNES like '%" + Nombre + "%' order by idESPACIOSCOMUNES";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				EspaciosComunes vo = new EspaciosComunes();
				vo.setIdEspaciosComunes(rs.getInt("idESPACIOSCOMUNES"));
				vo.setNombreEspaciosComunes(rs.getString("nombreESPACIOCOMUNES"));
				vo.setFechaEspaciosComunes(rs.getString("fechaESPACIOCOMUNES"));
				vo.setHorarioLibre(rs.getString("horasESPACIOSCOMUNES"));
				vo.setDetalleEspaciosComunes(rs.getString("detalleESPACIOSCOMUNES"));
				
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	public void eliminar(String idEspaciosComunes) throws DAOExcepcion {
		String query = "delete from espacios_comunes WHERE idESPACIOSCOMUNES=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, idEspaciosComunes);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	public EspaciosComunes obtener(String idEspaciosComunes) throws DAOExcepcion {
		System.out.println("EspaciosComunes: obtener(String idEspaciosComunes)");
		EspaciosComunes vo = new EspaciosComunes();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idESPACIOSCOMUNES, descripcion from cuotas where idESPACIOSCOMUNES=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,idEspaciosComunes );
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdEspaciosComunes(rs.getInt(1));
				vo.setNombreEspaciosComunes(rs.getString(2));
				vo.setFechaEspaciosComunes(rs.getString(3));
				vo.setHorarioLibre(rs.getString(4));
				vo.setDetalleEspaciosComunes(rs.getString(5));
				
				//c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

}




